Luaリファレンス 要注意点 ~モジュール作成~†
モジュールの作成†
module ("モジュール名", package.seeall)†
module 化すると、モジュールファイルの中では、グローバル変数が使えなくなってしまうので、
それを使えるようにするために package.seeall がある。
事実上第2引数には、package.seeall 以外は指定出来ない。
モジュール名.lua というファイルに作るのが良い。
このモジュールには、_M, _NAME, _PACKAGE にそれぞれ、モジュールテーブル、モジュール名、パッケージ名が格納される。
モジュールのロード†
require†
local m = require "io"
m.write("hello world\n")
for w in pairs(m) do
print(w)
end
のような形となる。
ジュールがロード済†
package.loaded( ) で判定可能。(有効な値[通常テーブルのアドレス])が入っている。
たとえば、
package.loaded["io"]
パスの検索(Luaライブラリ)†
たとえば、
require "sql"
と書いた場合、
- sql
- sql.lua
- c:\windows\sql
- /usr/local/lua/sql/sql.lua
の順番で検索する。
パスの検索(Cライブラリ)†
たとえば、
require "sql"
と書いた場合、
- .\?.dll
- C:\Program Files\Lua501\dll\?.dll
の順番で検索する。
パスと環境変数†
環境変数LUA_PATH†
Luaモジュール用のパスは環境変数 LUA_PATH で設定が可能。
その際には、LUAのデフォルトのパスは「;;」で付け加えることが可能
環境変数LUA_CPATH†
Cモジュール用のパスは環境変数 LUA_CPATH で設定が可能。
その際には、LUAのC系検索デフォルトのパスは「;;」で付け加えることが可能。
モジュール名とハイフン†
モジュールの名前にハイフンが入っていると、そこまでは取り除かれる
対象がC系APIをロードするためのものであれば、特殊な現象が起きる。
require "v1-mod" ---> luaopen_mod
require "a-b" ---> luaopen_b
サブモジュール†
require "mod.sub"
luaでは、modディレクトリのsub.lua ファイル
C系ライブラリの場合は、というファイルのluaopen_mod_subに紐付けされる。
''メインのモジュールをロードしたからといって、
そのディレクトリ下にあるサブモジュールが勝手にロードされるといったことはない。''
ちゃんと自分で全部呼び出すこと。